/*****************************************************
	Nome: 		VISED MED Module
	Versão:		3.6

	Funcionalidades:
	- Cálculo de forças
	- Integração Temporal

 *****************************************************/

#if !defined (MED_MODULE_INCLUDED)
#define MED_MODULE_INCLUDED

#include "DEFS.H"
#include "../colisao/detColisao.hpp"
#include "../integracao/Integracao.h"

class CORE;
class MODEL;
class CDET;
class SPHERE;
class LINE;
class ForcaResultante;
class Fronteira;
class Restricoes;
class DetecColisao;
class Integracao;
class ScreeningMola;

class MED {

    private:
    inline void OrganizaPonteirosMolas();
    void OrganizaPonteirosEsferas(int);
    int CalculaMenorMaiorElementos();

	public:

    ForcaResultante *contato;
    ForcaResultante *campoForca;
    Fronteira *fronteira;
    Restricoes *restricoes;
    ForcaResultante *forcasIndependentes;
    ForcaResultante *molas;
    DetecColisao *DetContatoEsferas;
    DetecColisao *calculoCampoForca;
    DetecColisao *colisaoLinhasEsferas;
    Integracao *integracao;
    ScreeningMola *molaScreening;
    REAL min_rad,max_rad;
    char qualOpcMola;
    char qualIntegracao;
    char qualDetCol;
    char qualDetCampo;
    bool tudoSeq;
    bool intSeq;
    bool detSeq;
    bool indepSeq;
    bool frontSeq;
    bool restrSeq;

	CORE* pCore;					// Núcleo associado
	MODEL* pModel;					// Modelo associado

	bool IsActive;

	REAL Critical_dT;				// Precisão recomendada

	MED();

	void Initialize( CORE* core );
	void Terminate();
	void StepForward();
	void StepForwardTudoNaColisao();
	inline void Imprime(const char*,const char*,const char*);
	inline void Imprime(const char*,const char*);

};

	#endif	// MED_MODULE_INCLUDED
